//package com.yueyang.sojourn.server.service.sojourn.pay;
//
//import com.alibaba.fastjson.JSON;
//import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
//import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
//import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingFinishRequest;
//import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingReceiverRequest;
//import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingReceiverResult;
//import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingResult;
//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
//import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
//import com.github.binarywang.wxpay.constant.WxPayConstants;
//import com.github.binarywang.wxpay.exception.WxPayException;
//import com.github.binarywang.wxpay.service.ProfitSharingService;
//import com.github.binarywang.wxpay.service.WxPayService;
//import com.yueyang.sojourn.server.model.enums.OrderStatusEnum;
//import com.yueyang.sojourn.server.model.po.SojournOrder;
//import com.yueyang.sojourn.server.model.po.SojournTransaction;
//import com.yueyang.sojourn.server.service.sojourn.order.SojournOrderService;
//import com.yueyang.sojourn.server.service.sojourn.transaction.SojournTransactionService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.math.BigDecimal;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 支付
// * @author Andy.yang
// * @version v1
// * @summary
// * @Copyright (c) 2019, YueYang Group All Rights Reserved.
// * @since 2020/3/25
// */
//@Service
//public class PayServiceBack {
//    @Autowired
//    WxPayService wxPayService;
//    @Autowired
//    ProfitSharingService profitSharingService;
//    @Autowired
//    SojournTransactionService transactionService;
//    @Autowired
//    SojournOrderService orderService;
//
//    /**
//     * 微信预支会订单
//     * 1: 必须保证幂等
//     *
//     * 本方法实现：
//     * 2：生成微信预支付订单（指明分账标识）
//     * 3：生成本地交易（残缺）
//     * 4：返回给小程序，让小程序进行直接对微信账号支付；
//     *
//     * 后续支付结果：
//     * 5：回调或主动查询（根据残缺交易）获取支付结果
//     * 6：补全 本地交易（残缺）、同步更新订单状态、同步库存
//     * @param order 本地订单
//     * @param openId 当前用户小程序中的Id
//     * @param needShare 是否需要分账
//     * @return 微信预支付id
//     */
//    public String prepay(SojournOrder order,String openId,String ip,boolean needShare) {
//        BigDecimal price = order.getTotalPrice();
//        WxPayMpOrderResult result = null;
//        try {
//            //拼装微信预支付请求参数
//            WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
//            orderRequest.setOutTradeNo(order.getSn());
//            orderRequest.setOpenid(openId);
//            orderRequest.setBody(merch.getTitle());
//            orderRequest.setProfitSharing(needShare ? "Y" : "N");//先打个标识，冻结支付：是否需要分账标识
//            // 订单总金额：元转成分
//            int fee = 0;
//            BigDecimal actualPrice = price;
//            fee = actualPrice.multiply(new BigDecimal(100)).intValue();
//            orderRequest.setTotalFee(fee);
//            orderRequest.setSpbillCreateIp(ip);
//
//            result = wxPayService.createOrder(orderRequest);
//
//            //缓存prepayID用于后续模版通知
//            String prepayId = result.getPackageValue();
//            prepayId = prepayId.replace("prepay_id=", "");
//            //生成一条不完整的交易记录
//            SojournTransaction transaction = transactionService.findByOrderSn(order.getSn());
//            if (transaction == null) {
//                transaction = new SojournTransaction();
//                transaction.setCreator(userId);
//                transaction.setStatus();
////                transaction.setDesc();
//                transactionService.add(transaction);
//            }else if(!prepayId.equals(transaction.getThirdPrepayId())){
//                transaction.setUpdator(userId);
//                transaction.setThirdPrepayId(prepayId);
//                transactionService.update(transaction);
//            }
//            //todo 支付日志
//            return prepayId;
//        }catch (Exception e){
//            //todo 支付日志
//            return null;
//        }
//    }
//
//    /**
//     * 支付结果处理：（定时、回调）
//     * 1：支付成功
//     * 2：补全 本地交易（残缺）
//     * 3：同步更新订单状态、
//     * 4：同步库存
//     * 5：记录日志
//     * @param wxPayResult 微信支付结果
//     */
//    @Transactional
//    public boolean updatePayResult(WxPayOrderNotifyResult wxPayResult){
//        if(!WxPayConstants.ResultCode.SUCCESS.equals(wxPayResult.getResultCode())){
////                logger.error(xmlResult);
//        }
//        if(!WxPayConstants.ResultCode.SUCCESS.equals(wxPayResult.getReturnCode())){
////                logger.error(xmlResult);
//        }
//
//
//        //成功：
//        String orderSn = wxPayResult.getOutTradeNo();
//        String payId = wxPayResult.getTransactionId();
//        // 分转化成元
//        String totalFee = BaseWxPayResult.fenToYuan(wxPayResult.getTotalFee());
//
//        SojournOrder order = orderService.findBySn(orderSn);
//
//        //1：补全交易
//        SojournTransaction transaction = transactionService.findByOrderSn(orderSn);
//        transaction.setThirdPrepayId(wxPayResult.getTransactionId());
//        transaction.setStatus();
//        transaction.setTotalFee(new BigDecimal(totalFee));//交易费
//        System.out.println("totalFee=" + totalFee);
//        //2：同步更新订单状态
//        orderService.updateStatus(order.getId(),OrderStatusEnum.TO_BE_TRIP.getCode());
//
//        //3:todo 同步更新库存
//
//
//        //失败：todo
//
//        return true;
//    }
//
//
//    /**
//     * 增加分账方:一次一个(创建商户时); 定时：
//     */
//    public void addWxShareReceiver(SojournOrder order) throws WxPayException {
//        //1：查询项目所在分账方
//
//        //2：计算每个分账方具体分账金额
//
//        //3：设置微信分账方
//        ProfitSharingReceiverRequest receiverRequest = ProfitSharingReceiverRequest.newBuilder().build();
//        Map<String,Object> receiver = new HashMap<>();
////        MERCHANT_ID：商户ID
////        PERSONAL_WECHATID：个人微信号 PERSONAL_OPENID：个人openid（由父商户APPID转换得到）PERSONAL_SUB_OPENID: 个人sub_openid（由子商户APPID转换得到）
//
//        //服务商：
//        receiver.put("type","MERCHANT_ID");
//        receiver.put("name","阅阳(上海)健康管理咨询有限公司");
//        receiver.put("account","1579764291");
//        receiver.put("relation_type","SERVICE_PROVIDER");
//        receiverRequest.setReceiver(JSON.toJSONString(receiver));
//        ProfitSharingReceiverResult result = profitSharingService.addReceiver(receiverRequest);
//
//        if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getResultCode())){
////                logger.error(xmlResult);
//            throw new WxPayException("微信增加分账账户失败！");
//        }
//        if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())){
////                logger.error(xmlResult);
//            throw new WxPayException("微信增加分账账户失败！");
//        }
//    }
//
//    /**
//     * 结算分账：结算失败-定时
//     */
//    public void submitShare(SojournTransaction transaction) throws WxPayException {
//        ProfitSharingFinishRequest request = ProfitSharingFinishRequest.newBuilder().build();
//        request.setOutOrderNo();//分账单号
//        request.setTransactionId(transaction.getThirdTransId());
//        ProfitSharingResult result = profitSharingService.profitSharingFinish(request);
//
//    }
//
//
//    /**
//     * 退款：分账 - 定时
//     */
//    public void refundShare(SojournTransaction transaction) throws WxPayException {
//
//    }
//
//    /**
//     * 退款：订单 - 定时
//     */
//    public void refundTransaction(SojournTransaction transaction) throws WxPayException {
//
//    }
//
//}
